/**
 * @file t_platform.h
 * @brief 平台相关头文件
 */
#ifndef _T_PLATFORM_H
#define _T_PLATFORM_H

#include "FreeRTOS.h"
#include "FreeRTOSConfig.h"
#include "event_groups.h"
#include "portmacro.h"
#include "queue.h"
#include "semphr.h"
#include "stdint.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "task.h"
#include "timers.h"
#ifdef __cplusplus
extern "C" {
#endif

// #include "stm32f4xx.h"                  // Device header
/*c_lib*/

// #include "t_register_bits.h"

#ifndef RTOS
#define freeRTOS 1
#endif
#define T_TRUE 1
#define T_FALSE 0
#define T_NULL 0

#if freeRTOS

#define AT_MALLOC(size) ({                         \
    void *_ptr = pvPortMalloc(size);               \
    if (_ptr != T_NULL) {                            \
        memset(_ptr, 0, size);                     \
    }                                              \
    _ptr;                                          \
})
#define AT_FREE(ptr) do {                          \
    if (ptr != T_NULL) {                             \
        vPortFree(ptr);                            \
        ptr = T_NULL;                                \
    }                                              \
} while (0)
#else
#define T_MALLOC(size) malloc(size)
#define T_FREE free
#endif

#if 1
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
#define BIT3 0x00000008
#define BIT4 0x00000010
#define BIT5 0x00000020
#define BIT6 0x00000040
#define BIT7 0x00000080
#define BIT8 0x00000100
#define BIT9 0x00000200
#define BIT10 0x00000400
#define BIT11 0x00000800
#define BIT12 0x00001000
#define BIT13 0x00002000
#define BIT14 0x00004000
#define BIT15 0x00008000
#define BIT16 0x00010000
#define BIT17 0x00020000
#define BIT18 0x00040000
#define BIT19 0x00080000
#define BIT20 0x00100000
#define BIT21 0x00200000
#define BIT22 0x00400000
#define BIT23 0x00800000
#define BIT24 0x01000000
#define BIT25 0x02000000
#define BIT26 0x04000000
#define BIT27 0x08000000
#define BIT28 0x10000000
#define BIT29 0x20000000
#define BIT30 0x40000000
#define BIT31 0x80000000
#endif

void t_delay(uint32_t x);
void t_longdelay(uint32_t x);
void t_longlongdelay(uint32_t x);

#ifdef __cplusplus
}
#endif

#endif /* _T_PLATFORM_H */
